package com.cskaoyan.javase.oop2.encapsulate._1extends._10final._3variable._0introduction;
/**
 * final修饰变量，表示最后的变量，最终的变量，即表示常量。
 * （表示在整个程序期间，值不会再变了）
 *
 * final修饰变量,可以修饰局部变量,成员变量,静态成员变量,三种变量它都可以修饰
 * (这三个原则学会了,final修饰变量就已经学会了)在具体学习final修饰具体变量的语法之前,我们要明确以下原则:
 *      1.常量的分类:
 *          a.字面值常量,直接出现在Java代码中各自取值.比如1,2,3,0.1,"hello",'a',true,null等
 *          b.自定义常量,在Java中把使用final修饰的变量,称之为自定义常量
 *          它们都是常量,它们取值在程序的运行过程中都是无法被改变的
 *          自定义常量是需要标识符命名的,自定义常量的命名和普通变量的命名是有区别的:
 *              变量需要小驼峰命名,见名知意...
 *              而自定义常量,建议命名时全部大写,然后单词之间用下划线"_"隔开
 *              比如: "MAX_VALUE","MIN_VALUE"
 *              但是从实践的开发出发,普遍只有final修饰的静态成员变量才会采取这种命名
 *              final修饰局部变量和成员变量建议仍然采取变量的命名方式.
 *              当然具体情况具体分析,在很多时候常量的命名没有那么严格的限制.
 *
 *      2.(重点)
 *          final变量仅表示该变量的取值不再发生改变,成为了一个常量.
 *          除此之外,所有的东西都不会发生改变,比如该变量的存储位置,生命周期,使用方式等等
 *          比如:
 *              final修饰局部变量,表示它成为了一个局部常量
 *              这个常量的取值不能改变,但也仍然存在方法栈帧中,随着方法调用同生共死.
 *
 *
 *     3.(重点)
 *      final修饰变量,可以修饰:
 *          a.基本数据类型变量
 *              final修饰基本数据类型变量,表示它的取值不能再改变了,成为一个常量.
 *          b.(重点)引用数据类型变量
 *              引用数据类型 = 引用 + 对象
 *              final修饰引用数据类型变量,实际上修饰的是引用,不可以直接修饰对象
 *              修饰引用,表示引用成为一个常量,表示引用中存储的地址不可再改变了
 *              --> 表示这个引用不能再指向新的对象了
 *              但是: 能不能通过这个引用去改变对象的状态呢?
 *              当然是可以的
 *
 * @since 09:39
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {

    }
}
